package com.itany.corejava.code13_jdbc;

import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

/**
 * @author MissChen
 * @date 2024年03月25日 10:02
 */
public class Test13_dbcp {
    public static void main(String[] args) throws SQLException {
        // test01();

        test02();
    }
    public static void test01() throws SQLException {
        BasicDataSource ds=new BasicDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://127.0.0.1:3306/jdbc?useUnicode=true&characterEncoding=utf-8");
        ds.setUsername("root");
        ds.setPassword("root");

        //配置初始化连接数:初始化连接池中申请的连接数量
        ds.setInitialSize(1);

        //最大活跃数：表示最多有多少个连接被使用
        ds.setMaxActive(1);

        //最大空闲连接数:保证连接池中最多存在多少个空闲的连接数
        ds.setMaxIdle(1);

        //最小空闲连接数:保证连接池中最少存在多少个空闲的连接数
        //如果不够可以自动开启，但是不能超出总数
        ds.setMinIdle(1);

        //设置超时时间，等待获取连接池中的连接的时间，如果等待的时间超过了，直接报错
        ds.setMaxWait(3000);

        //从连接池中获取连接
        Connection conn=ds.getConnection();
        System.out.println(conn);

        //归还连接，归还连接后，连接会自动回到连接池中
        // 等待下一个使用
        conn.close();

        Connection conn2=ds.getConnection();
        System.out.println(conn2);
        // conn2.close();

        Connection conn3=ds.getConnection();
        System.out.println(conn3);

    }
    public static void test02(){
        Properties p=new Properties();
        try {
            p.load(Test13_dbcp.class.getClassLoader().getResourceAsStream("dataSource.properties"));
            // System.out.println(p);

            //在BasicDataSourceFactory中提供了自动设置的方法
            //只要配置文件读取的所有数据的key与方法中的key一致接口
            DataSource ds= BasicDataSourceFactory.createDataSource(p);
            Connection conn=ds.getConnection();
            System.out.println(conn);
            conn.close();
            Connection conn2=ds.getConnection();
            System.out.println(conn2);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
